package net.servir.capacidades.dao;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.BancoPregunta;
import net.servir.capacidades.model.CorreoMasivo;
import net.servir.capacidades.model.CorreoRegular;
import net.servir.capacidades.model.Departamento;
import net.servir.capacidades.model.Diagnostico;
import net.servir.capacidades.model.Distrito;
import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.EjecutoraRegimen;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.ExmPerfil;
import net.servir.capacidades.model.GenOption;
import net.servir.capacidades.model.LogAuditoria;
import net.servir.capacidades.model.NivelGobierno;
import net.servir.capacidades.model.ParticipanteBusqueda;
import net.servir.capacidades.model.Pliego;
import net.servir.capacidades.model.Profesion;
import net.servir.capacidades.model.Provincia;
import net.servir.capacidades.model.Regimen;
import net.servir.capacidades.model.Responsable;
import net.servir.capacidades.model.ResponsableBusqueda;
import net.servir.capacidades.model.ResponsableEjecutoraAmbito;
import net.servir.capacidades.model.ResponsableIdentificacion;
import net.servir.capacidades.model.Sector;
import net.servir.capacidades.model.SegPerfil;
import net.servir.capacidades.model.SegPerfilPermiso;
import net.servir.capacidades.model.SegPermiso;
import net.servir.capacidades.model.SegRecurso;
import net.servir.capacidades.model.ServicioCivil;
import net.servir.capacidades.model.ServicioCivilBusqueda;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.TipoDocumento;
import net.servir.capacidades.model.TipoObservacion;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.Persona;
import net.servir.capacidades.model.jsp.JspResponsableEdicion;
import net.servir.capacidades.model.jsp.JspUsuarioEdicion;

public interface CapacidadesDAO {

	public LinkedList<Sistema> ObtenerSistema();
	public LinkedList<Ambito> ObtenerAmbito(Number id_sistema);
	public LinkedList<Ejecutora> ObtenerEjecutora(Number id_ejecutora);
	public Integer ObtenerPerfil(String dni, String clave);
	public String ObtenerFechaSistema();
	public String ObtenerFechaHoraSistema();
	public List<Etapa> ObtenerEtapasAmbito(Number idAmbito);	
	public Sistema GetSistema(Number idSistema);
	public Usuario GetUsuarioIdentificacion(String dni);
	public LinkedList<Ejecutora> ObtenerEjecutorasNivelGobierno(Integer idNivelGobierno,String ubigeo,  Integer idSector);
	public LinkedList<Provincia> ObtenerProvincias(String coddep);
	public LinkedList<Distrito> ObtenerDistritos(String coddep, String codpro);
	public LinkedList<NivelGobierno> ObtenerNivelGobiernos();
	public LinkedList<Departamento> ObtenerDepartamentos();
	public LinkedList<Sector> ObtenerSectors();
	public List ObtenerParticipanteBusqueda(String vSql);
	public List ObtenerParticipanteOficializar(String vSql);
	
	
	public String ObtenerClave(String dni, Integer idSistema);
	public LinkedList<Test> ObtenerTestDiagnostico(Integer idAmbito);
	public LinkedList<Test> ObtenerListaTest(Integer idAmbito, Integer idTipoPrueba);
	public LinkedList<Test> ObtenerTestDiagnosticoNoEjecutados(Integer idAmbito);

	public ServicioCivil ObtenerServicioCivil(Number idServicioCivil);
	public LinkedList<Regimen> ObtenerRegimen();
	public LinkedList<TipoObservacion> ObtenerTipoObservacion();
	public LinkedList<Profesion> ObtenerProfesion();
	public LinkedList<TipoDocumento> ObtenerTipoDocumento();
	public List ObtenerFunciones(Number idServicioCivil);
	public List<Number> ObtenerIdFuncionesSC(Number idServicioCivil);
	public String EditarCorreo(ServicioCivil obj);
	public LinkedList<LogAuditoria> ObtenerLogAuditoria(String dni);
	public List ObtenerDatosPrueba(Integer idTest,Integer idSistema, Integer idAmbito);
	/* ====================================================
	 * ============ DAO DE RESPONSABLE EDICION ===========
	 * ====================================================
	 */
	public Responsable GetResponsablePorDNI(String dni, Number idAmbito);
	public Responsable GetResponsable(Number idResponsable);
	public ServicioCivil ObtenerServicioCivilPorDNI(String dni, Number id_persona, Number id_ambito);
	public List<Diagnostico> ObtenerDiagnosticos();
	public Diagnostico GetDiagnostico(Number idDiagnostico);
	public Persona GetPersona(Responsable responsable);
	public Persona GetPersona(String dni);
	public Persona GetPersona(String dni, Number idAmbito);
	public Persona GetPersonaPorEmail(String email, Number idAmbito);

	//===========   CENSO   INICIO========
	public List<ResponsableEjecutoraAmbito> ObtenerAmbitosResponsable(Number idResponsable);
	//===========   CENSO   FIN========

	public void EliminarParticipante(JspResponsableEdicion obj);

	public Responsable GetResponsablePorEjecutora(Number idEjecutora);
	public Integer grabarNuevoResponsable(JspResponsableEdicion obj);
	public Integer grabarResponsablePersona(JspResponsableEdicion obj);
	public void grabarResponsable(JspResponsableEdicion obj);
	public void grabarValidacion(Persona persona);
	public void grabarHabilitacion(JspResponsableEdicion obj);

	
	/* ====================================================
	 * ============ DAO DE RESPONSABLE BUSQUEDA ===========
	 * ====================================================
	 */
	public LinkedList<GenOption> ObtenerEstadosResponsable();
	public LinkedList<GenOption> ObtenerEstadosOperadores();
	public LinkedList<GenOption> ObtenerPerfiles();
	public LinkedList<GenOption> ObtenerEstadosInscritos();
	public LinkedList<GenOption> ObtenerEstadosPlazo();
	public List obtenerRptResponsables(String vSql);
	public String obtenerRptQueryResponsables(ResponsableBusqueda obj);
	/* ====================================================
	 * ============ DAO DE SERVICIO CIVIL BUSQUEDA ===========
	 * ====================================================
	 */
	public List obtenerRptServicioCivil(String vSql);
	public String obtenerRptQueryServicioCivil(ServicioCivilBusqueda obj);
	/* ====================================================
	 * ============ DAO DE SERVICIO CIVIL EDICION =========
	 * ====================================================
	 */
	public ResponsableIdentificacion GetResponsableIdentificacion(String dni);	
	public String VerificarExisteDNI(String dni, Number idEjecutora);
	public String verificarExisteDNI(String dni);
	public void EliminarServicioCivil(ServicioCivil obj);
	public String AgregarServicioCivil(ServicioCivil obj);
	public String AgregarFuncionesSC(Number idServicioCivil, String listaFunciones, Number idAmbito);
	public String EditarServicioCivil(ServicioCivil obj);
	public void grabarObservacion(ServicioCivil obj);
	public void grabarSubsanacion(ServicioCivil obj);
	public void grabarValidacion(ServicioCivil obj);
	public void grabarInvalidacion(ServicioCivil obj);
	//Viene de CENSO DAO
	public LinkedList<ResponsableIdentificacion> ObtenerResponsableIdentificacion(String dni);

//necesario
	public Ejecutora GetEjecutora(Number idEjecutora);
	public List ObtenerServicioCivilBusquedaFromSql(String sql);
	public void cargarResultadosBusqueda(String vSql, String dni, Integer tipo);
	public List ObtenerDestinatariosCorreo(String dni);
	public String ObtenerQueryDestinatariosCorreo(String dni);
//Participante
	public String ObtenerQueryParticipanteBusqueda(ParticipanteBusqueda obj);
	public String obtenerQueryParticipanteOficializar(ParticipanteBusqueda obj, String dniUsuario);

	public LinkedList<Test> ObtenerTestDiagnoticoPorDNI(String dni, Number id_persona);
	public void grabarInvalidacion(Persona persona);
	public void grabarInhabilitacion(JspResponsableEdicion obj);
	public LinkedList<GenOption> ObtenerModalidadesResponsables();
	public void grabarDesasignacion(JspResponsableEdicion obj);
	public void finalizarInscripcionParticipantes(JspResponsableEdicion obj);
	public LinkedList<Pliego> obtenerPliegos(Integer idSector);
	public Integer grabarEjecutora(Ejecutora ejecutora);
	public Test getTest(Integer idTest);
	public LinkedList<BancoPregunta> obtenerBancoPreguntas();
	public Integer grabarTest(Test test);
	public Test obtenerTest(Integer idTest);
	public void habilitarPrueba(Integer idTest);
	public void iniciarPrueba(Integer idTest);
	public void generarPrueba(Integer idTest);
	public void calificarPrueba(Integer idTest);
	public void informarPrueba(Integer idTest);
	public LinkedList<ExmPerfil> obtenerExmPerfiles(Integer idSistema);
	public void eliminarCandidato(Integer idServicioCivil, String dniUsuario);
	public void oficializarCandidatos(String vSqlOfi, String dniUsuario, Integer idTest);
	public void eliminarCandidatos(String vSqlOfi, String dniUsuario);
	public void eliminarParticipante(Integer idParticipante);
	public String ObtenerNuevaClave(ServicioCivil obj);
	public String obtenerQueryCorreoMasivo(ParticipanteBusqueda obj, String dniUsuario);
	public void eliminarDestinarioCorreo(Integer idServicioCivil, String dniUsuario);
	public void eliminarDestinariosCorreo(String desSql, String dniUsuario);
	public void confirmarDestinariosCorreo(String desSql, String dniUsuario);
	public CorreoMasivo getCorreoMasivo(String dniUsuario);
	public void grabarCorreo(CorreoMasivo correo_masivo);
	public void ejecutarPrueba(Number id_correo_masivo);
	public void ejecutarEnvio(Number id_correo_masivo, String dniUsuario);
	public LinkedList<GenOption> obtenerTiposCorreo();
	public LinkedList<GenOption> obtenerTiposCorreoMasivo();
	public void grabarCorreoRegular(CorreoRegular correo);
	public void ejecutarPruebaCorreo(CorreoRegular correo, String correo_pruebas);
	public CorreoRegular getCorreoRegular(CorreoRegular correo);
	public LinkedList<SegPerfil> obtenerPerfiles();
	public String agregarUsuario(JspUsuarioEdicion obj);
	
	public String ObtenerDescEtapaFuncion(Number idFuncion);
	public List ObtenerActividades(Number idFuncion);
	public LinkedList<EjecutoraRegimen> ObtenerRegimenes();
	public Integer tieneResponsableLaEjecutora(Integer id_ejecutora);
	public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj, Responsable responsableActual);
	//public void actualizarResponsableDeEjecutora(JspResponsableEdicion obj);
	public Persona GetOtraPersonaPorEmail(Integer id_persona, String email, Number idAmbito) ;
	public Persona GetOtraPersonaPorDni(Integer id_persona, String dni, Number idAmbito);
	public String VerificarExisteOtroDNI(String dni, Number idAmbito, Number idServicioCivil);
	public String VerificarExisteOtroCorreo(String correo, Number idAmbito, Number idServicioCivil);
	public List<String> getParametroCorreo();
	public void eliminarParticipantes(String lsql);
	public void ejecutarEnvioMasivo(String cod_tipo, String dniUsuario);
	public void informarPruebaPorCorreo(Integer idTest);
	public void cerrarPrueba(Integer idTest);
}

